package com.web.common.iot.mqtt.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;

import javax.validation.constraints.NotBlank;

import org.hibernate.validator.constraints.Range;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;

/**
 * <p>
 * mqtt授权
 * </p>
 *
 * @author zhouhui
 * @since 2024-04-25
 */
@Getter
@Setter
@TableName("mqtt_acl")
@Schema(title = "MqttAcl对象", description = "mqtt授权")
public class MqttAcl implements Serializable {

    private static final long serialVersionUID = 1L;

    /** 主键 */
    @Schema(title = "主键")
    @TableId(value = "main_id", type = IdType.AUTO)
    private Integer mainId;

    /** 对应类型，1客户端Id；2用户名；3所有用户 */
    @Range(min = 1, max = 3, message = "未选择对应用户类型")
    @Schema(title = "对应类型，1客户端Id；2用户名；3所有用户")
    private Integer type;

    /** 客户端Id */
    @Schema(title = "客户端Id")
    private String clientId;

    /** 用户名（可以当成分组使用） */
    @Schema(title = "用户名（可以当成分组使用）")
    private String username;

    /** 操作权限，allow；deny */
    @Schema(title = "操作权限，allow；deny")
    private String permission;

    /** 规则适用操作，publish、subscribe、all */
    @Schema(title = "规则适用操作，publish、subscribe、all")
    private String action;

    /** 主题 */
    @NotBlank(message = "未填写主题")
    @Schema(title = "主题")
    private String topic;

    /** 消息 QoS，多个用字符串分隔 */
    @Schema(title = "消息 QoS，多个用字符串分隔")
    private String qos;

    /** 是否支持发布保留消息,0不保留；1保留 */
    @Schema(title = "是否支持发布保留消息,0不保留；1保留")
    private Integer retain;

    /** 是否删除，0否；1是 */
    @Schema(title = "是否删除，0否；1是")
    private Integer delFlag;

    /** 创建人 */
    @Schema(title = "创建人")
    private Integer createUserId;

    /** 创建时间 */
    @Schema(title = "创建时间")
    private LocalDateTime createTime;

    /** 更新人 */
    @Schema(title = "更新人")
    private Integer updateUserId;

    /** 更新时间 */
    @Schema(title = "更新时间")
    private LocalDateTime updateTime;


}
